package lib

import (
	"chat-room/providers"
	"crypto/sha256"
	"fmt"
	"math/rand"
	"net"
	"path/filepath"
	"time"
)

/**
 * @Author: yang
 * @Description： 获取项目中的路径
 * @Date: 2021/10/19 14:20
 */
func GetProjectPath(pathStr string) string {
	return filepath.Join(providers.RootPath, pathStr)
}

/**
 * @Author: yang
 * @Description：获取随机数[0, max]
 * @Date: 2021/10/25 14:04
 */
func GetRandNum(max int) int {
	rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
	return rnd.Intn(max)
}

/**
 * @Author: yang
 * @Description：生成随机字符串
 * @Date: 2021/10/27 16:53
 */
func GetRandomString(l int) string {
	str := "0123456789abcdefghijklmnopqrstuvwxyz"
	bytes := []byte(str)
	result := []byte{}
	r := rand.New(rand.NewSource(time.Now().UnixNano()))
	for i := 0; i < l; i++ {
		result = append(result, bytes[r.Intn(len(bytes))])
	}
	return string(result)
}

/**
 * @Author: yang
 * @Description：token生成
 * @Date: 2021/10/27 17:01
 */
func GenSaltToken(salt string, password string) string {
	// @Todo 密码使用sha256加密
	s := sha256.New()
	s.Write([]byte(password))
	str := fmt.Sprintf("%x", s.Sum(nil))

	// @Todo 密码 + salt 使用sha256加密
	s2 := sha256.New()
	s2.Write([]byte(str + salt))
	str = fmt.Sprintf("%x", s2.Sum(nil))
	return str
}

/**
 * @Author: yang
 * @Description：获取服务器Ip
 * @Date: 2021/10/28 17:10
 */
func GetServerIp() (ip string) {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return ""
	}

	for _, address := range addrs {
		// 检查ip地址判断是否回环地址
		if ipNet, ok := address.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
			if ipNet.IP.To4() != nil {
				ip = ipNet.IP.String()
			}
		}
	}
	return
}
